package utils

import (
	"fmt"
	"regexp"
	"slices"
)

// LoadSSL 加载SSL证书和私钥，并配置TLS设置。
// 参数:
//
//	sslDir - ssl证书的存放路径。
//	sslKeyFile - ssl证书的私钥文件名。
//	sslCrtFile - ssl证书的crt证书的文件名
//	secSkip - 是否跳过TLS证书的验证
//
// 返回值:
//
//	*tls.Config - TLS设置
//	error - 报错信息


// Contains 泛型函数，用于检查切片中是否包含目标元素
func Contains[T comparable](target T, slice []T) bool {
	return slices.Contains(slice, target)
}

// ValidateUsername 用于校验用户名是否合法。
func ValidateUsername(username string) bool {
	if username == "" {
		return false
	}
	re := regexp.MustCompile(`^[\w-]+$`)
	return re.MatchString(username)
}

// 检查密码强度
func CheckPasswordStrength(password string) bool {
	if len(password) < 8 {
		return false
	}
	hasLower := regexp.MustCompile(`[a-z]`).MatchString(password)
	hasUpper := regexp.MustCompile(`[A-Z]`).MatchString(password)
	hasDigit := regexp.MustCompile(`\d`).MatchString(password)
	hasSpecial := regexp.MustCompile(`[!@#$%^&*(),.?":{}|<>]`).MatchString(password)
	return hasLower && hasUpper && hasDigit && hasSpecial
}

// GetUserHomeDir 根据用户名获取用户主目录路径。
func GetUserHomeDir(username string) (string, error) {
	if !ValidateUsername(username) {
		return "", fmt.Errorf("illegal username: %s", username)
	}
	if username == "root" {
		return "/root", nil
	}
	return "/home/" + username, nil
}
